/**
 *
 * \file Define.h
 * \brief redefine some basic types.
 * \author Edouard ROGE
 * \date 08 august 2012
 *
 */

#ifndef _CORE_DEFINE_
#define _CORE_DEFINE_

#include <functional>

/** Integer on 4 bits */
typedef char int4;

/** Unsigned integer on 4 bits */
typedef unsigned char uint4;

/** Integer on 8 bits */
typedef short int8;

/** Unsigned integer on 8 bits */
typedef unsigned short uint8;

/** Integer on 32 bits */
typedef int int32;

/** Unsigned integer on 32 bits */
typedef unsigned int uint32;

/** Integer on 64 bits */
typedef long long int64;

/** Unsigned integer on 64 bits */
typedef unsigned long long uint64;

/** Unsigned integer */
typedef unsigned int uint;

/** Unsigned char */
typedef unsigned char uchar;

/** Unsigned long*/
typedef unsigned long ulong;

/** Function pointer void Foo(float) */
typedef void (*VoidFunctionFloat)(float);

/** Function pointer void Foo() */
typedef std::function<void()> VoidFunctionVoid;

/** Function pointer void Foo(int) */
typedef std::function<void(int)> VoidFunctionInt;

/** Function pointer void Foo(int, int) */
typedef std::function<void(int, int)> VoidFunctionIntInt;

#endif // _CORE_DEFINE_
